我維護的 OMA 讓你在支援的環境中繼續使用 Claude Code、Codex CLI 或 Cursor,並加入共通的專業技能、多 agent 工作流程與已設定的完成檢查。Lauren Tan 的官方課程公開章節涵蓋驗證技能、技能評估與嚴格的 CI 限制。公開的 pstack 驗證原則要求直接檢查實際結果,並在可行時保留能重新執行的檢查與輸出。
專案名稱:oh-my-agent。開發狀態:持續維護,採 MIT 授權。
這個示範使用 OMA 15.0.13 的原始碼 CLI,在獨立的測試目錄手動呼叫真正的 Stop hook。影片呈現實際輸出,不是自主 agent 工作過程的錄影,也不是正式環境事故的紀錄。
OMA 以 .agents/ 統一管理設定與指令,再轉成支援的 agent 執行環境所需的格式。模型仍然負責規劃工作、選擇修改方式;OMA 管理工作流程狀態,並執行明確設定的檢查。
在 Claude Code、Codex CLI、Cursor 等支援的環境中,可以保留原本使用的 agent,再導入共通的設定與技能。不過,各環境可用的 hook 與功能不同,不能把一個環境的示範當成所有環境的行為。
在這個例子中,我啟用 Ralph 工作流程,把 test 設為完成 gate。工作流程尚未結束時,Stop hook 會執行設定的測試指令,再依結果決定是否阻擋停止。這樣可以在執行紀錄中找到完成判斷的依據。hook 不會替專案補齊測試案例,也不會判斷測試範圍以外的需求是否完成。
測試函式是 isExpired(expiresAt, now)。三個測試分別檢查期限前、期限當下、期限後。原本的判斷式是:
return now > expiresAt;
規格要求期限當下就算過期。因此,當兩個值相等時,實際結果 false 與預期 true 不符。第一次執行測試是 2 個通過、1 個失敗,測試指令的退出碼為 1。
接著,我手動呼叫 Stop hook。它重新執行測試,回傳包含 "decision":"block" 的 JSON,阻擋這次停止。之後我把比較式改成:
- return now > expiresAt;
+ return now >= expiresAt;
修改後,三個測試全部通過。再次呼叫 Stop hook 時,標準輸出為空,示範用的工作流程狀態也被清除。事件紀錄留下 gate.passed,以及原因為 completion_gate_passed 的 session.ended。
這裡容易誤讀的是退出碼:Stop hook 本身在阻擋與放行兩種情況都以 0 結束。測試指令的退出碼、hook 的 JSON 決定、工作流程狀態是不同的資訊,不能只看 hook 程式是否成功執行,就判定工作已經通過檢查。
如果你想在 agent 宣告完成時,用專案已有的測試再確認一次,這個做法可以把檢查指令與結果留下來,方便回頭核對。建議先在小型測試專案中放入一個已知失敗的案例,觀察阻擋回應,再修正並重跑。示範證明的是這組測試的 gate 行為,沒有比較其他工具的效能,也沒有證明所有缺陷都能被找出。
Gist 內有執行紀錄、差異檔、驗證結果與重現腳本。閱讀紀錄時,可以同時核對測試輸出、decision 欄位和狀態清除的結果。
需要 CLI、hook 與完成 gate 時,先準備 Bun、uv 與 Serena,再執行:
bunx oh-my-agent@latest
oma doctor
如果只執行 npx skills add first-fluke/oh-my-agent,安裝的是技能包,不包含這個示範所需的完整 hook 與 gate 設定。oma doctor 可用來檢查安裝環境;後續仍要依自己的專案設定檢查指令。
本文使用 AI 協助撰寫、翻譯與修訂。技術描述以公開的執行紀錄與驗證結果為依據。